package javaCode.chapter13.set_;

import java.util.HashSet;
import java.util.Objects;

/**
 * @author 徐州城
 * @version 1.0
 */
@SuppressWarnings({"all"})
public class HashSetIncrement {
    public static void main(String[] args) {

        /*
        1. HashSet底层是HashMap，第一次添加时，table数组扩容到16，临界值(threshold) 是 16*加载因子(loadFactor)是 0.75 = 12
        2. 如果table 数组使用到了临界值 12，就会扩容到 16*2=32，新的临界值就是 32 * 0.75 = 24，依次类推
         */
        HashSet hashSet = new HashSet();
//        for (int i = 0; i < 100; i++) {
//            hashSet.add(i);
//        }

        /*
        在Java8中，如果一条链表的元素个数到达(等于或超过) TREEIFY_THRESHOLD(默认是 8)，
        并且talbe的大小 >= MIN_TREEIFY_CAPACITY(默认64) 就会进化树化(红黑树)
         */
        for (int i = 0; i < 7; i++) { //在table的某一条链表中添加了 7个对象
            hashSet.add(new A(i)); //保证equals不同
        }

        /*
        当我们向hashSet中增加一个元素， -> Node -> 加入table，就算是增加了一个
         */

        for (int i = 0; i < 7; i++) { //
            hashSet.add(new B(i)); //保证equals不同
        }
    }
}

class A{
    private int n;

    public A(int n) {
        this.n = n;
    }


    @Override
    public int hashCode() {
        return 100;
    }
}

class B{
    private int n;

    public B(int n) {
        this.n = n;
    }


    @Override
    public int hashCode() {
        return 200;
    }
}